package neichuan.util.config;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLDecoder;
import java.util.Properties;

//读取用户配置文件,该配置文件在jar包外面/config
public class UserConfig extends DefaultConfig {

    String path="config/userconfig.properties";
    @Override
    public synchronized void reset() throws IOException {
        super.reset();
        Properties p=null;
        if(path!=null && path!=""){
            //文件全路径
            String userConfigPath = getUserConfigPath(path);
            //文件夹全路径
            if(userConfigPath!=null && userConfigPath!="" ){
                userConfigPath=URLDecoder.decode(userConfigPath,"UTF-8").toString();
                File file=new File(userConfigPath);
                //查找文件是否存在
                if(!file.exists() || !file.isFile()){
                    createFile(file);
                    return;
                }
                //读取配置
                p = loadFile(new FileInputStream(file));
                loadPropertys(p);

            }
        }
    }

    /**
     * 创建这个文件，包括路径上的目录，存在则不创建
     * @param file
     * @return
     * @throws IOException
     */
    public boolean createFile(File file) throws IOException {
        //创建目录
        File dicfile = new File(getLastDic(file.getPath()));
        if (!dicfile.exists() || !dicfile.isDirectory()) {
            dicfile.mkdirs();
        }
        //创建文件
        if (!file.exists() || !file.isFile()) {
            file.createNewFile();
            return true;
        }
        return false;
    }

    /**
     * 获取配置文件的绝对路径，并将path拼接在后面
     * @return
     */
    public String getUserConfigPath(String path){
        String jarDic = getJarDic();
        if(jarDic!=null){
            String lastDic = getLastDic(jarDic);
            if(lastDic!=null){
                return getLastDic(lastDic)+path;
            }
        }
        return null;
    }

    public String getUserConfigPath(){
        String jarDic = getJarDic();
        if(jarDic!=null){
            String lastDic = getLastDic(jarDic);
            if(lastDic!=null){
                return getLastDic(lastDic);
            }
        }
        return null;
    }


    /**
     * 返回jar包所在路径，不为jar返回null
     * @return
     */
    public String getJarDic(){
        URL location = UserConfig.class.getProtectionDomain().getCodeSource().getLocation();
        String path=location.getPath();
        if(path.endsWith(".jar")){
            return path;
        }
        return null;
    }


    /**
     * 获得上一级目录
     */
    public String getLastDic(String path){
        if(path==null){
            return null;
        }
        if(path.endsWith("/")){
            if(path.length()==1){
                return path;
            }
            return getLastDic(path.substring(0, path.length() - 1));
        }
        else {
            int last=path.lastIndexOf("/");
            if(last>0){
                return path.substring(0,last+1);
            }
        }
        return null;
    }



}
